package com.xyhuo.leetcode.december;

/**
 * 有效的数独
 * https://leetcode.cn/problems/valid-sudoku/
 *
 * @time 2023/12/13
 */
public class IsValidSudoku {

//    public static void main(String[] args) {
//        IsValidSudoku ivs = new IsValidSudoku();
//        char[][] board = {{'5', '3', '.', '.', '7', '.', '.', '.', '.'}, {'6', '.', '.', '1', '9', '5', '.', '.', '.'}, {'.', '9', '8', '.', '.', '.', '.', '6', '.'}, {'8', '.', '.', '.', '6', '.', '.', '.', '3'}, {'4', '.', '.', '8', '.', '3', '.', '.', '1'}, {'7', '.', '.', '.', '2', '.', '.', '.', '6'}, {'.', '6', '.', '.', '.', '.', '2', '8', '.'}, {'.', '.', '.', '4', '1', '9', '.', '.', '5'}, {'.', '.', '.', '.', '8', '.', '.', '7', '9'}};
//        ivs.isValidSudoku(board);
//    }

    public boolean isValidSudoku(char[][] board) {
        int[][] b1 = new int[9][9];
        int[][] b2 = new int[9][9];
        int[][] b3 = new int[9][9];
        for (int i = 0; i < 9; i++) {
            for (int j = 0; j < 9; j++) {
                if (board[i][j] == '.') {
                    continue;
                }
                int val = board[i][j] - '1';
                if (b1[i][val] == 1) {
                    return false;
                }
                b1[i][val] = 1;

                if (b2[j][val] == 1) {
                    return false;
                }
                b2[j][val] = 1;


                if (b3[3 * (i / 3) + j / 3][val] == 1) {
                    return false;
                }
                b3[3 * (i / 3) + j / 3][val] = 1;
            }
        }
        return true;
    }
}
